package com.zhanghe.study.study_scala.collection

/**
 * List
 *
 * @author zh
 * @date 2021/5/8 10:36
 */
object TestList {
  def main(args: Array[String]): Unit = {
    // List是不可变的
    // 如果不指定确切的泛型，默认是List[Any]的
    val list = List(1, 2, 3, "a")
    //List(1, 2, 3, a)
    println(list)

    println("=====访问元素=====")
    // 指定泛型
    val listInt: List[Int] = List(1, 2, 3)

    // 访问元素  从0开始
    println(listInt(1))

    println("=====添加新的元素=====")
    // 对于List的操作，原始的List不会发生改变，只会返回一个新的List
    // :在List一端   +在要添加的元素的一端
    // :+表示追加到List的尾端
    val listInt1 = listInt :+ 4

    //原始List：List(1, 2, 3)
    println("原始List："+listInt)
    //追加元素之后的List：List(1, 2, 3, 4)
    println("追加元素之后的List："+listInt1)
    val listAppend = listInt.appended(5)
    // List(1, 2, 3, 5)
    println("append追加元素之后的List："+listAppend)
    // +:表示插入到List的头部
    val listInt2 = 0 +: listInt
    //原始List：List(1, 2, 3)
    println("原始List："+listInt)
    // 插入元素之后的List：List(0, 1, 2, 3)
    println("插入元素之后的List："+listInt2)

    // 使用::可以向集合中添加多个元素，List一定要在最右边，运算是从右向左运行的
    val listInt3 = 4 :: 5 :: listInt2
    // List(4, 5, 0, 1, 2, 3)
    println(listInt3)

    // 使用::是将该对象作为一个元素来插入到集合中的，如果中间有个集合，也会作为一个整体插入进去
    val listInt4 = 12::13::listInt::listInt1
    // List(12, 13, List(1, 2, 3), 1, 2, 3, 4)
    println(listInt4)

    // 使用:::可以将集合中的每一个元素插入到另一个集合中
    val listInt5 = 12::13::listInt:::listInt1
    // List(12, 13, 1, 2, 3, 1, 2, 3, 4)
    println(listInt5)
    // drop表示的是从左往右开始删除几个元素
    val listInt6 = listInt.drop(2)
    // List(3)
    println(listInt6)

    // dropRight表示的是从右往左开始删除几个元素
    val listInt7 = listInt.dropRight(2)
    // List(1)
    println(listInt7)

    // 空列表
    val nilList = Nil
    //List()
    println(nilList)

  }

}
